/**
 * 
 */
package cn.biplam.back.sql.dml;

import cn.biplam.back.sql.ddl.Table;
import cn.biplam.common.wrapper.ErrorMessage;

/**
 * DML语义模型基础类
 * @author 	WangSong 2009-6-11 上午10:17:08
 * @version 1.0
 */
public abstract class DmlBase {
	
	/**
	 * DML类型 简单/复合
	 */
	public enum Dml_Type{
		/**使用其他SQL语义模型创建DML语句*/
		Complex,
		/**基于字符串格式的参数创建DML语句*/
		Simple;
	}
	/**当前DML语句的类型*/
	protected Dml_Type dmlType;
	/**当前DML语句操作的表名称*/
	protected String sTableName;
	/**当前DML语句的名称(Insert/Update/Delete*/
	private String sDmlName;
	
	/**
	 * 构造方法 传入表名称构造
	 * @param sTableName
	 */
	public DmlBase(String sDmlName,String sTableName){
		this.dmlType=Dml_Type.Simple;
		this.sDmlName=sDmlName;
		this.sTableName=sTableName;
	}
	
	/**
	 * 返回当前DML语句的类型
	 * @return
	 */
	public Dml_Type getDmlType() {
		return dmlType;
	}

	/**
	 * 返回当前DML语句的表名称
	 * @return
	 */
	public String getTableName() {
		return sTableName;
	}

	/**
	 * 返回标准SQL语句
	 * @return
	 */
	public String toString(){
		try {
			return this.getSimpleSql();
		} catch (ErrorMessage e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 返回当前DML语句的名称(Insert/Update/Delete)
	 * @return
	 */
	public String getDmlName() {
		return sDmlName;
	}
	
	/**
	 * 由参数信息直接生成通用DML语句,忽略数据库版本
	 * @return
	 * @throws ErrorMessage 
	 */
	public abstract String getSimpleSql() throws ErrorMessage;
	
	
	
/**以下是设计阶段功能,待Select模型完成后再实现***/	
	
	/**
	 * 构造方法 传入Table DDL模型对象初始化
	 * @param mTable
	 * @throws ErrorMessage 
	 */
	public DmlBase(Table mTable) throws ErrorMessage{
		this.dmlType=Dml_Type.Complex;
		throw new ErrorMessage("本功能尚未实现!");
	}

	
	/**
	 * 返回与数据库版本匹配的DML SQL
	 * @return
	 * @throws ErrorMessage
	 */
//	public abstract String getComplexSql() throws ErrorMessage;


}
